<?php

/*
 * PC 16/06/2012.
 * Ce fichier va permettre de détecter que l'application n'ets pas configurer et donc de rediriger vers le controler installer
 * 
 */


class Application_Plugin_DispatchInstaller extends Zend_Controller_Plugin_Abstract 
{

	
	/**
	 * Chemin de redirection lors de l'échec d'authentification
	 */
	const FAIL_AUTH_MODULE     = 'default';
	const FAIL_AUTH_ACTION     = 'logout';
	const FAIL_AUTH_CONTROLLER = 'index';
	
	/**
	 * Chemin de redirection lors de l'échec de contrôle des privilèges
	 */
	const FAIL_ACL_MODULE     = 'default';
	const FAIL_ACL_ACTION     = 'error';
	const FAIL_ACL_CONTROLLER = 'error';
	
	// Constante de définition de l'action par défaut à contrôler
	const DEFAULT_ACTION    = 'Consulter';
	
	/**
	* Constructeur
	*/
	public function __construct()	{
	    
	}

	/**
	* Vérifie les autorisations
	* Utilise _request et _response hérités et injectés par le FC
	*/
	public function preDispatch(Zend_Controller_Request_Abstract $request)	{
    	    
		$adapter=Zend_Registry::get('TBL_ADAPTER');
		
		//echo $adapter;
		
		Zend_Registry::get('LOG')->info("MODULE : ".$request->getModuleName().
										" , CONTROLEUR : ".$request->getControllerName() .
										" , ACTION : ".$request->getActionName());
			
		//si pas d'adapter et pas de requete sur le controler Installer
		//error_log('xxx' . $request->getControllerName());
		if ($adapter == 'indefini' && $request->getControllerName() != 'installer') //  
		{
			//on redirige vers le controller Installer
			Zend_Registry::get('LOG')->info("Redirection vers le controller Installer");
			//$request->setModuleName($module) ;
			$request->setControllerName('Installer') ;
			$request->setActionName('Index') ;
		}
    	    
    	    //1er test le fichier de log.
	/*	if (!file_exists(dirname(__FILE__) . '/php.log'))
		{
			file_put_contents(dirname(__FILE__) . '/php.log',""); //crée un fichier vide
		}
		*/
    	    //error_log('toto');
    	    /*
            $logger = new Zend_Log();
            $redacteur = new Zend_Log_Writer_Stream('/var/log/php.log');

            $logger->addWriter($redacteur);

            // is the user authenticated
            if ($this->_auth->hasIdentity()) {
              // yes ! we get his role
              $user = $this->_auth->getStorage()->read() ;
              $role = $user['role'];
            } else {
              // no = guest user
              $role = 'Invite';
            }



            Zend_Registry::get('LOG')->info("Module avant :".$module);
            Zend_Registry::get('LOG')->info("Controleur avant :".$controller);
            Zend_Registry::get('LOG')->info("Action avant :".$action); 

            $front = Zend_Controller_Front::getInstance() ;
            $default = $front->getDefaultModule() ;

            // compose le nom de la ressource
            if ($module == $default)	{
                    $resource = '/'.$controller ;
            } else {
                    $resource = $module.'/'.$controller ;
            }

            // est-ce que la ressource existe ?
            if (!$this->_acl->has($resource)) {
               $resource = null;
            }

            // contrôle si l'utilisateur est autorisé
            if (!$this->_acl->isAllowed($role, $resource, self::DEFAULT_ACTION)) {
                    // l'utilisateur n'est pas autorisé à accéder à cette ressource
                    // on va le rediriger
                    if (!$this->_auth->hasIdentity()) {
                            // il n'est pas identifié -> module de login
                            $module = self::FAIL_AUTH_MODULE ;
                            $controller = self::FAIL_AUTH_CONTROLLER ;
                            $action = self::FAIL_AUTH_ACTION ;
                    } else {
                            // il est identifié -> error de privilèges
                            $module = self::FAIL_ACL_MODULE ;
                            $controller = self::FAIL_ACL_CONTROLLER ;
                            $action = self::FAIL_ACL_ACTION ;
                    }
            }

            //Zend_Registry::get('LOG')->info("Module après :".$module);
            //Zend_Registry::get('LOG')->info("Controleur après :".$controller);
            //Zend_Registry::get('LOG')->info("Action après :".$action);

            $request->setModuleName($module) ;
            $request->setControllerName($controller) ;
            $request->setActionName($action) ;
            */
    }
        
        
}

?>
